# 迭代器：每一次的结果根据上一次的结果而来叫做迭代，迭代器就是生成这个对象
"""
可迭代的对象：
字典
元组
列表
字符串
集合

不可迭代的对象：
整数
浮点型
"""
# 创建一个迭代器
"""
dict1 = {"name":"suki",'age':20}
dic_iter = dict1.__iter__()     # 创建了一个迭代器
# 结合next进行访问下一次内容
print(dic_iter.__next__()) # name
print(dic_iter.__next__()) # age
print(dic_iter.__next__()) # 报错
"""
"""
str_obj = "abcdefg"
str_iter = str_obj.__iter__()       # 创建迭代器
# 访问下一个值
print(next(str_iter))       # a
print(next(str_iter))       # b
print(next(str_iter))       # c
"""
# 误区：
"""
dic1 = {"name":"zhangsan",'age':19}
# 访问下一次迭代的值
print(next(dic1.__iter__()))        # name
print(next(dic1.__iter__()))        # name
print(next(dic1.__iter__()))        # name
"""


# ================================生成器==================
def num():
    a = 0
    while True:
        yield a     # yield：生成器的关键字。它的作用是代码执行到此就会结束，并相当于return会去，可以拿到返回值
                            # 当你下一次再调用函数的时候，会执行下面的代码，在执行上面的yield生成器
        print("啦啦啦AAA")
        a +=1
        print("啦啦啦")
a = num()
print(next(a))      # 访问下一次的值：0
print(next(a))      # 访问下一次的值：1

"""
生成器也是迭代器的一种，但是它只能够迭代一次
yield相当于一个return，会有返回值
下次再调用函数的时候，会从下向上执行代码块
"""
























